//mapping type
interface Person {
    name: string,
    age: number
}
type PersonOptional = Partial<Person>;
type PersonRequired = Required<Person>;
type PersonReadonly = Readonly<Person>;
type PickName = Pick<Person, 'name'>;
type OmitName = Omit<Person, 'name'>;
type JSONMap = Record<string, string | number>;

//condition type
interface T {
    (...args: any): any;
};
class U { };
type Exc = Exclude<string | number | boolean, number>;
type TCutU = Exclude<T, U>;
type Ext = Extract<string | number | boolean, number>;
type UfromT = Extract<T, U>;
type NonNull = NonNullable<string | number | null | undefined>;
type NonEmpty = NonNullable<T>;
type FucRet = ReturnType<() => string>;
type FunctionReturn = ReturnType<T>;
type ConstructObject = InstanceType<typeof U>;
